/*
 * TcpSession.h
 *
 *  Created on: 26/06/2011
 *      Author: george
 */

#ifndef TCPSESSION_H_
#define TCPSESSION_H_

#include "types.h"
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>



class TcpSession {
public:
	u_int8_t state;
	u_int16_t attributes;

	u_int16_t src_port;
	u_int16_t dst_port;

	struct in_addr src;
	struct in_addr dst;

//	se a variavel server for verdadeira o host com ip igual a src é o servidor, se não o host com ip igual a dst é o servidor
	bool server;

	u_int16_t protocol;

//	Arquivo que armazenará os pacotes
	std::ofstream packets;

//	Nome legivel da origem e destino da sessao icmp
	std::string srcaddr;
	std::string dstaddr;

//	Nome do arquivo que armazena os pacotes da sessao
	std::string filename;
	std::stringstream protocol_name;
	std::stringstream src_port_name;
	std::stringstream dst_port_name;

	TcpSession(struct in_addr src, struct in_addr dst, u_int16_t src_port, u_int16_t dst_port, u_int8_t protocol);
	bool add(tcp_hdr_t *tcp);
	void close();
	~TcpSession(){}

	static const int CLOSED 		 = 1;
	static const int LISTEN 		 = 2;
	static const int HALF_SYN_RCVD   = 3;
	static const int SYN_RCVD 		 = 4;
	static const int ESTABLISHED 	 = 5;
	static const int CLOSE_WAIT 	 = 6;
	static const int LAST_ACK 		 = 7;
	static const int HALF_CLOSE_WAIT = 8;

};

#endif /* TCPSESSION_H_ */
